package com.iamteer.day19;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

/*import static java.util.Collections.sort;
import static java.util.Collections.binarySearch;*/
import static java.util.Collections.*;
/**
主要回顾：静态导入、增强 for 循环

静态导入是 JDK1.5 引入的新特性，其他作用是简化书写。
	import static 包名.类名.静态的成员;
当出现重名时，会使用本类的方法（重名不同参则报错）

增强 for 循环是 JDK1.5 引入的新特性，其作用是简化迭代器的书写格式（底层使用了迭代器）
实现了 Iterable 接口的对象或者数组对象可以使用。
	for(变量类型 变量名 : 遍历的目标){
	
	}

 */

class MyList implements Iterable<String>{
	Object[] arr = new Object[10];
	
	int index = 0;
	
	public void add(Object o) {
		arr[index++] = o;
	}
	
	public int size() {
		return index;
	}
	
	@Override
	public Iterator<String> iterator() {
		return new Iterator<String>() {
			int cursor = 0;
			@Override
			public boolean hasNext() {
				return cursor != index;
			}
			
			@Override
			public String next() {
				return (String) arr[cursor++];
			}
			
			@Override
			public void remove() {
				Iterator.super.remove();
			}
		};
	}
}

public class StaticImport {

	public static void main(String[] args) {
//		staticImport();
		foreachTest();
	}

	public static void staticImport() {
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(13);
		list.add(9);
		list.add(8);
		list.add(15);
		
		//排序
//		Collections.sort(list);
//		System.out.println(list);
//		System.out.println(Collections.binarySearch(list, 13));
		
		sort(list);
		System.out.println(list);
		System.out.println(binarySearch(list, 13));
	}
	
	
	public static void foreachTest() {
		HashSet<String> set = new HashSet<String>();
		set.add("狗娃");
		set.add("狗剩");
		set.add("铁蛋");
		
		//使用迭代器遍历
		Iterator<String> iterator = set.iterator();
		while (iterator.hasNext()) {
			String string = (String) iterator.next();
			System.out.println(string);
		}
		
		//增强 for 循环遍历
		for (String string : set) {
			System.out.println(string);
//			set.remove(string);	//报错：不能使用集合对象来操作集合（底层使用了迭代器）
		}
		
		int[] arr = {12, 3, 1, 34};
		//普通循环遍历
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		
		//增强 for 循环遍历
		for (int i : arr) {
			System.out.println(i);
		}
		
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("001", "张三");
		map.put("002", "李四");
		map.put("003", "王五");
		map.put("004", "赵六");
		
		//为了使用增强 for 循环，需要把双列转成单列
		Set<Entry<String, String>> entries = map.entrySet();
		for (Entry<String, String> entry : entries) {
			System.out.println(entry.getKey() + "  " + entry.getValue());
		}
		
		//自定义的类，实现 Iterable 接口后，可以使用增强 for 循环
		MyList list = new MyList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		list.add("赵六");
		
		for (String item :list) {
			System.out.println(item);
		}
		
	}
}
